package com.skydroid.demo.utils

import android.content.Context
import android.text.TextUtils
import android.util.Log

/**
 * author:CQD

 * e-mail:634897993@qq.com

 * data:  2020/4/22

 * desc:
 *
 * version:
 */
object LogUtils {




    private const val SEGMENT_SIZE = 3 * 1024
    private var isDebug // 是否需要打印bug，可以在application的onCreate函数里面初始化
            = true
    private const val TAG = "test_log"
    private const val HTTP_TAG = "http_log"
    private const val ERROR_CATCH_EXCEPTION = "error_catch_exception"
    private const val ERROR_TAG = "error_tag"
    private const val ERROR_DB_TAG = "error_db_tag"
    private const val PERMISSION_TAG = "permission_log"
    private const val WELCOME_TAG = "welcome_log"

    fun setIsDebug(isDebug: Boolean) {
        LogUtils.isDebug = isDebug
    }

    fun http(msg: String) {
        logDebug(HTTP_TAG, msg)
    }

    fun pay(msg: String) {
        logDebug("fc_pay_tag", msg)
    }

    fun httpOverTime(msg: String) {
        logDebug("http_over", msg)
    }

    fun errorCatch(e: Error?) {
        if (e != null) {
            logDebug(ERROR_TAG, e.toString())
        }
    }

    fun exceptionCatch(e: Exception?) {
        if (e != null) {
            logDebug(ERROR_CATCH_EXCEPTION, e.toString())
        }
    }

    fun exceptionCatchLog(e: Exception?) {
        if (e != null) {
            logDebug("catch_exception", e.toString())
        }
    }


    fun webLog(msg: String) {
        logDebug("webLog", msg)
    }

    fun errorLog(msg: String) {
        logDebug(ERROR_TAG, msg)
    }

    fun test(msg: String) {
        logDebug(TAG, msg)
    }

    fun dnsLog(msg: String) {
        logDebug("HttpDnsLog", msg)
    }

    fun cookie(msg: String) {
        logDebug("cookie_tag", msg)
    }

    fun IM(msg: String) {
        logDebug("nim_tag", msg)
    }

    fun image(msg: String) {
        logDebug("image_tag", msg)
    }

    fun network(msg: String) {
        logDebug("network_tag", msg)
    }

    fun db(msg: String) {
        logDebug(ERROR_DB_TAG, msg)
    }

    fun dbLog(msg: String) {
        logDebug("db_tag", msg)
    }

    fun d(tag: String, msg: String) {
        logDebug(tag, msg)
    }

    fun router(msg: String) {
        logDebug("fc_router_tag", msg)
    }

    fun miPush(msg: String) {
        logDebug("miPush_tag", msg)
    }

    fun printLog(msg: String) {
        logDebug("printLog", msg)
    }

    fun debugCookieAll(msg: String) {
        logDebug("debugCookie", msg)
    }

    fun debugCookie(msg: String) {
        logAll("debugCookie", msg)
    }

    fun service(msg: String) {
        logDebug("service_tag", msg)
    }

    fun sophix(msg: String) {
        logDebug("Sophix_tag", msg)
    }

    fun httpAll(msg: String) {
        logAll(HTTP_TAG, msg)
    }

    fun fileUpload(msg: String) {
        logDebug("FileUpLoader", msg)
    }

    /**
     * 权限日志(平台权限和内容员工权限)
     * @param msg
     */
    fun permissionLog(msg: String) {
        logDebug(PERMISSION_TAG, msg)
    }

    private fun logDebug(tag: String, msg: String) {
        if (!isDebug) {
            return
        }
        if (TextUtils.isEmpty(msg)) {
            Log.d(tag, "println needs a message")
            return
        }
        Log.d(tag, msg)
    }

    fun logAll(tag: String?, msg: String) {
        if (!isDebug) {
            return
        }
        if (TextUtils.isEmpty(msg)) {
            Log.d(tag, "println needs a message")
            return
        }
        val length = msg.length.toLong()
        if (length <= SEGMENT_SIZE) { // 长度小于等于限制直接打印
            Log.d(tag, msg)
            return
        }
        var currentLength = 0
        while (currentLength < msg.length) {
            val endPosition =
                if (currentLength + SEGMENT_SIZE >= msg.length) msg.length else currentLength + SEGMENT_SIZE
            Log.d(tag, msg.substring(currentLength, endPosition))
            currentLength += SEGMENT_SIZE
        }
    }

    fun isDebug(): Boolean {
        return isDebug
    }

    fun paySecret(msg: String) {
        logDebug("fc_paysecret_tag", msg)
    }

    fun welcomeLog(msg: String) {
        logDebug(WELCOME_TAG, msg)
    }
}